package cz.muni.fi.pa036.kiss.serviceimpl;

import cz.muni.fi.pa036.kiss.Entity.Kolej;
import cz.muni.fi.pa036.kiss.Entity.KolejAssembler;
import cz.muni.fi.pa036.kiss.Entity.KolejDTO;
import cz.muni.fi.pa036.kiss.dao.KolejDAO;
import cz.muni.fi.pa036.kiss.service.KolejService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author peter
 */
public class KolejServiceImpl implements KolejService{

    @Autowired
    private KolejDAO kolejDAO;
    @Autowired
    private KolejAssembler kolejassembler;
    
    @Transactional
    @Override
    public void create(KolejDTO kolej) {
        if (kolej == null) {
            throw new IllegalArgumentException("kolej is null");
        }
        
        if (kolej.getId() != null) {
            throw new IllegalArgumentException("kolej.id is not null");
        }
        Kolej kol = kolejassembler.createEntityfromDTO(kolej);
        kolejDAO.create(kol);
        kolej.setId(kol.getId());
    }

    @Transactional(readOnly = true)
    @Override
    public KolejDTO get(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("kolej.Id is null");
        }
        
        Kolej kol = kolejDAO.get(id);
        if (kol == null) {
            return null;
        }        
        return kolejassembler.createDTOfromEntity(kol);
    }

    @Transactional
    @Override
    public void update(KolejDTO kolej) {
        if (kolej == null) {
            throw new IllegalArgumentException("kolej is null");
        }        
        if (kolej.getId() == null) {
            throw new IllegalArgumentException("kolej.id is null");
        }
        
        Kolej kol = kolejassembler.createEntityfromDTO(kolej);
        kolejDAO.update(kol);
    }

    @Transactional
    @Override
    public void remove(KolejDTO kolej) {
        if (kolej == null) {
            throw new IllegalArgumentException("kolej is null");
        }        
        if (kolej.getId() == null) {
            throw new IllegalArgumentException("kolej.id is null");
        }
        
        Kolej kol = kolejassembler.createEntityfromDTO(kolej);
        kolejDAO.remove(kol);
    }

    @Transactional(readOnly= true)
    @Override
    public List<KolejDTO> findAll() {
        List<Kolej> result = kolejDAO.findAll();
        List<KolejDTO> bpDTOList = new ArrayList();
        
        for (Kolej kol : result) {
            bpDTOList.add(kolejassembler.createDTOfromEntity(kol));
        }
        return bpDTOList;
    }

    @Transactional(readOnly= true)
    @Override
    public List<KolejDTO> findByName(String nazev) {
        if (nazev == null) {
            throw new IllegalArgumentException("nazev is null");
        }
        List<Kolej> result = kolejDAO.findByName(nazev);
        List<KolejDTO> ret = new ArrayList();
        for (Kolej kol : result) {
            ret.add(kolejassembler.createDTOfromEntity(kol));
        }
        return ret;
    }
    
}
